<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
<meta name="viewport" content="width=device-width">
<meta name="theme-color" content="#222" media="(prefers-color-scheme: light)">
<meta name="theme-color" content="#222" media="(prefers-color-scheme: dark)"><meta name="generator" content="Hexo 5.2.0">


  <link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon-next.png">
  <link rel="icon" type="image/png" sizes="32x32" href="/images/favicon-32x32-next.png">
  <link rel="icon" type="image/png" sizes="16x16" href="/images/favicon-16x16-next.png">
  <link rel="mask-icon" href="/images/logo.svg" color="#222">

<link rel="stylesheet" href="/css/main.css">



<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.1.2/css/all.min.css" integrity="sha256-xejo6yLi6vGtAjcMIsY8BHdKsLg7QynVlFMzdQgUuy8=" crossorigin="anonymous">
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.1.1/animate.min.css" integrity="sha256-PR7ttpcvz8qrF57fur/yAx1qXMFJeJFiA6pSzWi0OIE=" crossorigin="anonymous">
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/fancybox/3.5.7/jquery.fancybox.min.css" integrity="sha256-Vzbj7sDDS/woiFS3uNKo8eIuni59rjyNGtXfstRzStA=" crossorigin="anonymous">

<script class="next-config" data-name="main" type="application/json">{"hostname":"gz1234.gitee.io","root":"/","images":"/images","scheme":"Gemini","darkmode":true,"version":"8.12.3","exturl":false,"sidebar":{"position":"left","display":"post","padding":18,"offset":12},"copycode":{"enable":true,"style":"flat"},"bookmark":{"enable":true,"color":"#222","save":"auto"},"mediumzoom":false,"lazyload":false,"pangu":false,"comments":{"style":"tabs","active":null,"storage":true,"lazyload":false,"nav":null},"stickytabs":false,"motion":{"enable":true,"async":false,"transition":{"post_block":"fadeIn","post_header":"fadeInDown","post_body":"fadeInDown","coll_header":"fadeInLeft","sidebar":"fadeInUp"}},"prism":false,"i18n":{"placeholder":"搜索...","empty":"没有找到任何搜索结果：${query}","hits_time":"找到 ${hits} 个搜索结果（用时 ${time} 毫秒）","hits":"找到 ${hits} 个搜索结果"},"path":"/search.xml","localsearch":{"enable":true,"trigger":"auto","top_n_per_article":1,"unescape":false,"preload":false}}</script><script src="/js/config.js"></script>

    <meta name="description" content="E-JSON数据传输标准简介E-JSON的设计目标是使业务系统向浏览器端传递的JSON数据保持一致，容易被理解和处理，并兼顾传输的数据量。E-JSON依托于http协议（rfc2616）与JSON数据交换格式（rfc4627）。 编撰erik, 欧阳先伟 评审曹特磊，蓝晓斌，李铮，林攀辉，童遥，王志寿，严俊羿 要求在本文档中，使用的关键字会以中文+括号包含的关键字英文表示：必须(MUST)。关键字">
<meta property="og:type" content="website">
<meta property="og:title" content="郭泽">
<meta property="og:url" content="https://gz1234.gitee.io/spec-master/e-json.html">
<meta property="og:site_name" content="郭泽">
<meta property="og:description" content="E-JSON数据传输标准简介E-JSON的设计目标是使业务系统向浏览器端传递的JSON数据保持一致，容易被理解和处理，并兼顾传输的数据量。E-JSON依托于http协议（rfc2616）与JSON数据交换格式（rfc4627）。 编撰erik, 欧阳先伟 评审曹特磊，蓝晓斌，李铮，林攀辉，童遥，王志寿，严俊羿 要求在本文档中，使用的关键字会以中文+括号包含的关键字英文表示：必须(MUST)。关键字">
<meta property="og:locale" content="zh_CN">
<meta property="article:published_time" content="2023-05-31T00:57:28.722Z">
<meta property="article:modified_time" content="2023-05-31T00:57:28.722Z">
<meta property="article:author" content="郭泽">
<meta name="twitter:card" content="summary">


<link rel="canonical" href="https://gz1234.gitee.io/spec-master/e-json">



<script class="next-config" data-name="page" type="application/json">{"sidebar":"","isHome":false,"isPost":false,"lang":"zh-CN","comments":true,"permalink":"https://gz1234.gitee.io/spec-master/e-json.html","path":"spec-master/e-json.html","title":""}</script>

<script class="next-config" data-name="calendar" type="application/json">""</script>
<title> | 郭泽
</title>
  





  <noscript>
    <link rel="stylesheet" href="/css/noscript.css">
  </noscript>
</head>

<body itemscope itemtype="http://schema.org/WebPage" class="use-motion">
  <div class="headband"></div>

  <main class="main">
    <header class="header" itemscope itemtype="http://schema.org/WPHeader">
      <div class="header-inner"><div class="site-brand-container">
  <div class="site-nav-toggle">
    <div class="toggle" aria-label="切换导航栏" role="button">
        <span class="toggle-line"></span>
        <span class="toggle-line"></span>
        <span class="toggle-line"></span>
    </div>
  </div>

  <div class="site-meta">

    <a href="/" class="brand" rel="start">
      <i class="logo-line"></i>
      <p class="site-title">郭泽</p>
      <i class="logo-line"></i>
    </a>
  </div>

  <div class="site-nav-right">
    <div class="toggle popup-trigger">
        <i class="fa fa-search fa-fw fa-lg"></i>
    </div>
  </div>
</div>



<nav class="site-nav">
  <ul class="main-menu menu"><li class="menu-item menu-item-home"><a href="/" rel="section"><i class="fa fa-home fa-fw"></i>首页</a></li><li class="menu-item menu-item-about"><a href="/about/" rel="section"><i class="fa fa-user fa-fw"></i>关于</a></li><li class="menu-item menu-item-tags"><a href="/tags/" rel="section"><i class="fa fa-tags fa-fw"></i>标签</a></li><li class="menu-item menu-item-categories"><a href="/categories/" rel="section"><i class="fa fa-th fa-fw"></i>分类</a></li><li class="menu-item menu-item-archives"><a href="/archives/" rel="section"><i class="fa fa-archive fa-fw"></i>归档</a></li>
      <li class="menu-item menu-item-search">
        <a role="button" class="popup-trigger"><i class="fa fa-search fa-fw"></i>搜索
        </a>
      </li>
  </ul>
</nav>



  <div class="search-pop-overlay">
    <div class="popup search-popup"><div class="search-header">
  <span class="search-icon">
    <i class="fa fa-search"></i>
  </span>
  <div class="search-input-container">
    <input autocomplete="off" autocapitalize="off" maxlength="80"
           placeholder="搜索..." spellcheck="false"
           type="search" class="search-input">
  </div>
  <span class="popup-btn-close" role="button">
    <i class="fa fa-times-circle"></i>
  </span>
</div>
<div class="search-result-container no-result">
  <div class="search-result-icon">
    <i class="fa fa-spinner fa-pulse fa-5x"></i>
  </div>
</div>

    </div>
  </div>

</div>
        
  
  <div class="toggle sidebar-toggle" role="button">
    <span class="toggle-line"></span>
    <span class="toggle-line"></span>
    <span class="toggle-line"></span>
  </div>

  <aside class="sidebar">

    <div class="sidebar-inner sidebar-nav-active sidebar-toc-active">
      <ul class="sidebar-nav">
        <li class="sidebar-nav-toc">
          文章目录
        </li>
        <li class="sidebar-nav-overview">
          站点概览
        </li>
      </ul>

      <div class="sidebar-panel-container">
        <!--noindex-->
        <div class="post-toc-wrap sidebar-panel">
            <div class="post-toc animated"><ol class="nav"><li class="nav-item nav-level-1"><a class="nav-link" href="#E-JSON%E6%95%B0%E6%8D%AE%E4%BC%A0%E8%BE%93%E6%A0%87%E5%87%86"><span class="nav-number">1.</span> <span class="nav-text">E-JSON数据传输标准</span></a><ol class="nav-child"><li class="nav-item nav-level-2"><a class="nav-link" href="#%E7%AE%80%E4%BB%8B"><span class="nav-number">1.1.</span> <span class="nav-text">简介</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#%E7%BC%96%E6%92%B0"><span class="nav-number">1.1.1.</span> <span class="nav-text">编撰</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#%E8%AF%84%E5%AE%A1"><span class="nav-number">1.1.2.</span> <span class="nav-text">评审</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#%E8%A6%81%E6%B1%82"><span class="nav-number">1.1.3.</span> <span class="nav-text">要求</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#JSON%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B"><span class="nav-number">1.2.</span> <span class="nav-text">JSON数据类型</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#%E5%9F%BA%E6%9C%AC%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B"><span class="nav-number">1.2.1.</span> <span class="nav-text">基本数据类型</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#%E5%A4%8D%E5%90%88%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B"><span class="nav-number">1.2.2.</span> <span class="nav-text">复合数据类型</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#http%E5%93%8D%E5%BA%94%E5%A4%B4"><span class="nav-number">1.3.</span> <span class="nav-text">http响应头</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#status"><span class="nav-number">1.3.1.</span> <span class="nav-text">status</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#Content-Type"><span class="nav-number">1.3.2.</span> <span class="nav-text">Content-Type</span></a><ol class="nav-child"><li class="nav-item nav-level-4"><a class="nav-link" href="#Context-Type%E7%A4%BA%E4%BE%8B"><span class="nav-number">1.3.2.1.</span> <span class="nav-text">Context-Type示例</span></a></li></ol></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#%E6%95%B0%E6%8D%AE%E5%AD%97%E6%AE%B5"><span class="nav-number">1.4.</span> <span class="nav-text">数据字段</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#status-1"><span class="nav-number">1.4.1.</span> <span class="nav-text">status</span></a><ol class="nav-child"><li class="nav-item nav-level-4"><a class="nav-link" href="#%E4%B8%80%E4%B8%AA%E6%88%90%E5%8A%9F%E8%AF%B7%E6%B1%82%E7%9A%84status%E5%AD%97%E6%AE%B5"><span class="nav-number">1.4.1.1.</span> <span class="nav-text">一个成功请求的status字段</span></a></li></ol></li><li class="nav-item nav-level-3"><a class="nav-link" href="#statusInfo"><span class="nav-number">1.4.2.</span> <span class="nav-text">statusInfo</span></a><ol class="nav-child"><li class="nav-item nav-level-4"><a class="nav-link" href="#client%E7%AB%AF%E5%8F%82%E6%95%B0%E9%94%99%E8%AF%AF%E7%9A%84statusInfo"><span class="nav-number">1.4.2.1.</span> <span class="nav-text">client端参数错误的statusInfo</span></a></li></ol></li><li class="nav-item nav-level-3"><a class="nav-link" href="#data"><span class="nav-number">1.4.3.</span> <span class="nav-text">data</span></a><ol class="nav-child"><li class="nav-item nav-level-4"><a class="nav-link" href="#%E4%B8%80%E4%B8%AA%E6%9F%A5%E8%AF%A2%E5%A7%93%E5%90%8D%E8%AF%B7%E6%B1%82%E7%9A%84%E8%BF%94%E5%9B%9E%E6%95%B0%E6%8D%AE"><span class="nav-number">1.4.3.1.</span> <span class="nav-text">一个查询姓名请求的返回数据</span></a></li></ol></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#%E6%95%B0%E6%8D%AE%E5%9C%BA%E6%99%AF"><span class="nav-number">1.5.</span> <span class="nav-text">数据场景</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#%E6%97%A5%E6%9C%9F%E7%B1%BB%E5%9E%8B"><span class="nav-number">1.5.1.</span> <span class="nav-text">日期类型</span></a><ol class="nav-child"><li class="nav-item nav-level-4"><a class="nav-link" href="#%E6%95%B0%E6%8D%AE%E5%9C%BA%E6%99%AF%EF%BC%9A%E6%97%A5%E6%9C%9F"><span class="nav-number">1.5.1.1.</span> <span class="nav-text">数据场景：日期</span></a></li></ol></li><li class="nav-item nav-level-3"><a class="nav-link" href="#%E8%AE%B0%E5%BD%95"><span class="nav-number">1.5.2.</span> <span class="nav-text">记录</span></a><ol class="nav-child"><li class="nav-item nav-level-4"><a class="nav-link" href="#%E6%95%B0%E6%8D%AE%E5%9C%BA%E6%99%AF%EF%BC%9A%E8%AE%B0%E5%BD%95"><span class="nav-number">1.5.2.1.</span> <span class="nav-text">数据场景：记录</span></a></li></ol></li><li class="nav-item nav-level-3"><a class="nav-link" href="#%E4%BA%8C%E7%BB%B4%E8%A1%A8"><span class="nav-number">1.5.3.</span> <span class="nav-text">二维表</span></a><ol class="nav-child"><li class="nav-item nav-level-4"><a class="nav-link" href="#%E6%95%B0%E6%8D%AE%E5%9C%BA%E6%99%AF%EF%BC%9A%E6%A0%87%E5%87%86%E4%BA%8C%E7%BB%B4%E8%A1%A8"><span class="nav-number">1.5.3.1.</span> <span class="nav-text">数据场景：标准二维表</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#%E6%95%B0%E6%8D%AE%E5%9C%BA%E6%99%AF%EF%BC%9A%E5%8F%98%E9%80%9A%E4%BA%8C%E7%BB%B4%E8%A1%A8"><span class="nav-number">1.5.3.2.</span> <span class="nav-text">数据场景：变通二维表</span></a></li></ol></li><li class="nav-item nav-level-3"><a class="nav-link" href="#%E6%95%B0%E6%8D%AE%E9%A1%B5"><span class="nav-number">1.5.4.</span> <span class="nav-text">数据页</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#%E6%95%B0%E6%8D%AE%E9%A1%B5%E5%8F%AF%E9%80%89%E5%B1%9E%E6%80%A7"><span class="nav-number">1.5.5.</span> <span class="nav-text">数据页可选属性</span></a><ol class="nav-child"><li class="nav-item nav-level-4"><a class="nav-link" href="#%E6%95%B0%E6%8D%AE%E5%9C%BA%E6%99%AF%EF%BC%9A%E6%95%B0%E6%8D%AE%E9%A1%B5"><span class="nav-number">1.5.5.1.</span> <span class="nav-text">数据场景：数据页</span></a></li></ol></li><li class="nav-item nav-level-3"><a class="nav-link" href="#%E9%94%AE-%E5%80%BC%E5%AF%B9%E8%B1%A1"><span class="nav-number">1.5.6.</span> <span class="nav-text">键&#x2F;值对象</span></a><ol class="nav-child"><li class="nav-item nav-level-4"><a class="nav-link" href="#%E6%95%B0%E6%8D%AE%E5%9C%BA%E6%99%AF%EF%BC%9A%E9%94%AE-%E5%80%BC%E5%AF%B9%E8%B1%A1"><span class="nav-number">1.5.6.1.</span> <span class="nav-text">数据场景：键&#x2F;值对象</span></a></li></ol></li><li class="nav-item nav-level-3"><a class="nav-link" href="#%E9%94%AE-%E5%80%BC%E6%9C%89%E5%BA%8F%E9%9B%86%E5%90%88"><span class="nav-number">1.5.7.</span> <span class="nav-text">键&#x2F;值有序集合</span></a><ol class="nav-child"><li class="nav-item nav-level-4"><a class="nav-link" href="#%E6%95%B0%E6%8D%AE%E5%9C%BA%E6%99%AF%EF%BC%9A%E9%94%AE-%E5%80%BC%E6%9C%89%E5%BA%8F%E9%9B%86%E5%90%88"><span class="nav-number">1.5.7.1.</span> <span class="nav-text">数据场景：键&#x2F;值有序集合</span></a></li></ol></li><li class="nav-item nav-level-3"><a class="nav-link" href="#%E6%A0%91"><span class="nav-number">1.5.8.</span> <span class="nav-text">树</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#%E6%A0%91%E5%9E%8B%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E7%9A%84%E5%8F%AF%E9%80%89%E8%8A%82%E7%82%B9%E5%B1%9E%E6%80%A7"><span class="nav-number">1.5.9.</span> <span class="nav-text">树型数据结构的可选节点属性</span></a><ol class="nav-child"><li class="nav-item nav-level-4"><a class="nav-link" href="#%E6%95%B0%E6%8D%AE%E5%9C%BA%E6%99%AF%EF%BC%9A%E6%A0%91%E5%9E%8B%E6%95%B0%E6%8D%AE"><span class="nav-number">1.5.9.1.</span> <span class="nav-text">数据场景：树型数据</span></a></li></ol></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#%E5%BC%95%E7%94%A8"><span class="nav-number">1.6.</span> <span class="nav-text">引用</span></a></li></ol></li></ol></div>
        </div>
        <!--/noindex-->

        <div class="site-overview-wrap sidebar-panel">
          <div class="site-author site-overview-item animated" itemprop="author" itemscope itemtype="http://schema.org/Person">
  <p class="site-author-name" itemprop="name">郭泽</p>
  <div class="site-description" itemprop="description"></div>
</div>
<div class="site-state-wrap site-overview-item animated">
  <nav class="site-state">
      <div class="site-state-item site-state-posts">
        <a href="/archives/">
          <span class="site-state-item-count">54</span>
          <span class="site-state-item-name">日志</span>
        </a>
      </div>
      <div class="site-state-item site-state-categories">
          <a href="/categories/">
        <span class="site-state-item-count">21</span>
        <span class="site-state-item-name">分类</span></a>
      </div>
      <div class="site-state-item site-state-tags">
          <a href="/tags/">
        <span class="site-state-item-count">51</span>
        <span class="site-state-item-name">标签</span></a>
      </div>
  </nav>
</div>



        </div>
      </div>
    </div>
  </aside>
  <div class="sidebar-dimmer"></div>


    </header>

    
  <div class="back-to-top" role="button" aria-label="返回顶部">
    <i class="fa fa-arrow-up"></i>
    <span>0%</span>
  </div>
  <a role="button" class="book-mark-link book-mark-link-fixed"></a>

<noscript>
  <div class="noscript-warning">Theme NexT works best with JavaScript enabled</div>
</noscript>


    <div class="main-inner page posts-expand">


    
    
    
    <div class="post-block" lang="zh-CN"><header class="post-header">

<h1 class="post-title" itemprop="name headline">
</h1>

<div class="post-meta-container">
</div>

</header>

      
      
      <div class="post-body">
          <h1 id="E-JSON数据传输标准"><a href="#E-JSON数据传输标准" class="headerlink" title="E-JSON数据传输标准"></a>E-JSON数据传输标准</h1><h2 id="简介"><a href="#简介" class="headerlink" title="简介"></a>简介</h2><p>E-JSON的设计目标是使业务系统向浏览器端传递的JSON数据保持一致，容易被理解和处理，并兼顾传输的数据量。E-JSON依托于http协议（rfc2616）与JSON数据交换格式（rfc4627）。</p>
<h3 id="编撰"><a href="#编撰" class="headerlink" title="编撰"></a>编撰</h3><p>erik, 欧阳先伟</p>
<h3 id="评审"><a href="#评审" class="headerlink" title="评审"></a>评审</h3><p>曹特磊，蓝晓斌，李铮，林攀辉，童遥，王志寿，严俊羿</p>
<h3 id="要求"><a href="#要求" class="headerlink" title="要求"></a>要求</h3><p>在本文档中，使用的关键字会以中文+括号包含的关键字英文表示：必须(MUST)。关键字”MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL”被定义在rfc2119中。</p>
<h2 id="JSON数据类型"><a href="#JSON数据类型" class="headerlink" title="JSON数据类型"></a>JSON数据类型</h2><p>JSON（JavaScript Object Notation）是一种轻量级，基于文本，语言无关的数据交换格式。其包括了基本数据类型4种和复合数据类型2种，共6种数据类型。在下面章节中，JSON数据类型的表示法为JSON+空格+数据类型，如：JSON Array。</p>
<p>传输的数据，包括对象属性以及数组成员， <em>必须(MUST)</em> 是6种JSON数据类型之一。 <em>杜绝(MUST NOT)</em> 使用function、Date等js对象类型。</p>
<h3 id="基本数据类型"><a href="#基本数据类型" class="headerlink" title="基本数据类型"></a>基本数据类型</h3><ul>
<li>Number可以表示整数和浮点数。</li>
<li>Boolean可以表示真假，值为true或false。</li>
<li>String表示一个字符串。</li>
<li>Null通常用于表示空对象。</li>
</ul>
<p>“true”和true，这两个数据代表的是不同的数据类型。非字符串类型数据输出时一定 <em>不要(MUST NOT)</em> 为两端加上双引号，否则可能产生不希望的后果（如if中判断”false”的结果是true）。其他容易产生错误的例子如：0和”0”等。</p>
<h3 id="复合数据类型"><a href="#复合数据类型" class="headerlink" title="复合数据类型"></a>复合数据类型</h3><p>Object是无序的集合，以键值对的方式保持数据。一个Object中包含零到多个name/value的数据，数据间以逗号(,)分隔。name为String类型，value可以是任意类型的数据。</p>
<p>Object的最后一个元素之后一定 <em>不要(MUST NOT)</em> 加上分隔符的逗号，否则可能导致解析出错。</p>
<p>Array(数组)为多个值的有序集合，数组元素间以逗号(,)分隔。</p>
<h2 id="http响应头"><a href="#http响应头" class="headerlink" title="http响应头"></a>http响应头</h2><h3 id="status"><a href="#status" class="headerlink" title="status"></a>status</h3><p>http响应的status <em>必须(MUST)</em> 为200。通常JSON数据被用于通过XMLHttpRequest对象访问，通过javascript进行处理。返回错误的状态码可能导致错误不被响应，数据不被处理。</p>
<h3 id="Content-Type"><a href="#Content-Type" class="headerlink" title="Content-Type"></a>Content-Type</h3><p>Content-Type字段定义了响应体的类型。一般情况下，浏览器会根据该类型对内容进行正确的处理。对于传输JSON数据的响应，Content-Type <em>推荐(RECOMMENDED)</em> 设置为”text/javascript”或”text/plain”。 <em>避免(MUST NOT)</em> 将Context-Type设置为text/html，否则可能导致安全问题。</p>
<p>Content-Type中可以指定字符集。通常 <em>需要(SHOULD)</em> 明确指定一个字符集。如果是通过XMLHTTPRequest请求的数据，并且字符编码为UTF-8时，可以不指定字符集。</p>
<h4 id="Context-Type示例"><a href="#Context-Type示例" class="headerlink" title="Context-Type示例"></a>Context-Type示例</h4><pre><code>text/javascript;charset=UTF-8</code></pre>
<h2 id="数据字段"><a href="#数据字段" class="headerlink" title="数据字段"></a>数据字段</h2><p>返回的数据包含在http响应体中。数据 <em>必须(MUST)</em> 是一个JSON Object。该Object可能包含3个字段：status，statusInfo，data。</p>
<h3 id="status-1"><a href="#status-1" class="headerlink" title="status"></a>status</h3><p>status字段 <em>必须(MUST)</em> 是一个不小于0的JSON Number整数，表示请求的状态。这个字段 <em>可以(SHOULD)</em> 被省略，省略时和为0时表示同一含义。</p>
<p>0：表示server端理解了请求，成功处理并返回。</p>
<p>非0：表示发生错误。 <em>可以(SHOULD)</em> 根据错误类型扩展错误码。</p>
<h4 id="一个成功请求的status字段"><a href="#一个成功请求的status字段" class="headerlink" title="一个成功请求的status字段"></a>一个成功请求的status字段</h4><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">&#123;</span><br><span class="line">    <span class="attr">&quot;status&quot;</span>: <span class="number">0</span>,</span><br><span class="line">    <span class="attr">&quot;data&quot;</span>: <span class="string">&quot;hello world!&quot;</span></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>




<h3 id="statusInfo"><a href="#statusInfo" class="headerlink" title="statusInfo"></a>statusInfo</h3><p>statusInfo字段 <em>通常(SHOULD)</em> 是一个JSON String或JSON Object，表示除了请求状态外server端想要对status做出的说明，使client端能够获取更多信息进行后续处理。这个字段是 <em>可选的(OPTIONAL)</em> 。下面的两个例子中，statusInfo字段的信息都可以用于client端程序的后续处理，但是粒度和处理方式会有不同。</p>
<h4 id="client端参数错误的statusInfo"><a href="#client端参数错误的statusInfo" class="headerlink" title="client端参数错误的statusInfo"></a>client端参数错误的statusInfo</h4><p>简单说明的statusInfo：</p>
<figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">&#123;</span><br><span class="line">    <span class="attr">&quot;status&quot;</span>: <span class="number">1</span>,</span><br><span class="line">    <span class="attr">&quot;statusInfo&quot;</span>: <span class="string">&quot;参数错误&quot;</span></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>

<p>具有更多信息的statusInfo：</p>
<figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">&#123;</span><br><span class="line">    <span class="attr">&quot;status&quot;</span>: <span class="number">1</span>,</span><br><span class="line">    <span class="attr">&quot;statusInfo&quot;</span>: &#123;</span><br><span class="line">        <span class="attr">&quot;text&quot;</span>: <span class="string">&quot;参数错误&quot;</span>,</span><br><span class="line">        <span class="attr">&quot;parameters&quot;</span>: &#123;</span><br><span class="line">            <span class="attr">&quot;email&quot;</span>: <span class="string">&quot;电子邮件格式不正确&quot;</span></span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>




<h3 id="data"><a href="#data" class="headerlink" title="data"></a>data</h3><p>data字段可以是除JSON Null之外的任意JSON类型，表示请求返回的数据主体。这个字段是 <em>可选的(OPTIONAL)</em> 。数据主体data包含了在请求成功时有意义的数据。</p>
<h4 id="一个查询姓名请求的返回数据"><a href="#一个查询姓名请求的返回数据" class="headerlink" title="一个查询姓名请求的返回数据"></a>一个查询姓名请求的返回数据</h4><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">&#123;</span><br><span class="line">    <span class="attr">&quot;status&quot;</span>: <span class="number">0</span>,</span><br><span class="line">    <span class="attr">&quot;data&quot;</span>: <span class="string">&quot;Lily&quot;</span></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>






<h2 id="数据场景"><a href="#数据场景" class="headerlink" title="数据场景"></a>数据场景</h2><p>本章为常见数据场景定义了通用的标准数据格式，用于数据传输和使用。额外地，本章为部分可能大数据量传输的数据场景定义了变通数据格式。变通数据格式可在数据解析阶段转换成标准数据格式。</p>
<p>变通数据格式 <em>必须(MUST)</em> 是一个JSON Object，其中 <em>必须(MUST)</em> 包含e-type属性和data属性。e-type属性标识数据类型，便于对数据进行解析；data属性包含变通后的数据。变通数据 <em>可以(MAY)</em> 包含其他的属性，标识数据的其他扩展信息。</p>
<p>变通数据格式的e-type属性定义了table值。e-type属性可以使用者扩展其他属性值，扩展的属性值 <em>必须(MUST)</em> 以“项目缩写-名称”命名，如“fc-list”，自主解析。</p>
<h3 id="日期类型"><a href="#日期类型" class="headerlink" title="日期类型"></a>日期类型</h3><p>日期类型不属于JSON数据类型。对于日期类型，我们 <em>必须(MUST)</em> 使用JSON String来表示。为了让日期能够更容易的被显示和被解析，对于日期我们 <em>应当(SHOULD)</em> 使用更适合internet的格式，遵循rfc3339。</p>
<h4 id="数据场景：日期"><a href="#数据场景：日期" class="headerlink" title="数据场景：日期"></a>数据场景：日期</h4><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">&#123;</span><br><span class="line">    <span class="attr">&quot;status&quot;</span>: <span class="number">0</span>,</span><br><span class="line">    <span class="attr">&quot;data&quot;</span>: <span class="string">&quot;2010-10-10&quot;</span></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>




<h3 id="记录"><a href="#记录" class="headerlink" title="记录"></a>记录</h3><p>记录代表二维表中的一行，通常用于表示某个具体事务抽象的属性。标准记录数据 <em>必须(MUST)</em> 为一个JSON Object，记录的主键命名 <em>必须(MUST)</em> 为“id”。单条记录数据不包含变通数据格式。</p>
<h4 id="数据场景：记录"><a href="#数据场景：记录" class="headerlink" title="数据场景：记录"></a>数据场景：记录</h4><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">&#123;</span><br><span class="line">    <span class="attr">&quot;id&quot;</span>: <span class="number">250</span>,</span><br><span class="line">    <span class="attr">&quot;name&quot;</span>: <span class="string">&quot;erik&quot;</span>,</span><br><span class="line">    <span class="attr">&quot;sex&quot;</span>: <span class="number">1</span>,</span><br><span class="line">    <span class="attr">&quot;age&quot;</span>: <span class="number">18</span></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>




<h3 id="二维表"><a href="#二维表" class="headerlink" title="二维表"></a>二维表</h3><p>二维表类型表识为table，是关系模型的主要数据结构。二维表结构具有变通数据格式。标准二维表数据 <em>必须(MUST)</em> 以一维JSON Array形式表示，JSON Array中每一项是一个JSON Object，代表一条记录。JSON Object的每个成员代表一个字段。每条记录的主键命名 <em>必须(MUST)</em> 为”id”。</p>
<p>在标准二维表中，字段名在每条记录中都被传输，会造成额外的数据量传输。这个问题会随着记录数的增大会更加突出。为了减少传输数据量，变通格式使用二维JSON Array传输数据，扩展fields属性用于字段说明。fields字段为JSON Array。</p>
<h4 id="数据场景：标准二维表"><a href="#数据场景：标准二维表" class="headerlink" title="数据场景：标准二维表"></a>数据场景：标准二维表</h4><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line">[</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="attr">&quot;id&quot;</span>: <span class="number">250</span>,</span><br><span class="line">        <span class="attr">&quot;name&quot;</span>: <span class="string">&quot;erik&quot;</span>,</span><br><span class="line">        <span class="attr">&quot;sex&quot;</span>: <span class="number">1</span>,</span><br><span class="line">        <span class="attr">&quot;age&quot;</span>: <span class="number">18</span></span><br><span class="line">    &#125;,</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="attr">&quot;id&quot;</span>: <span class="number">251</span>,</span><br><span class="line">        <span class="attr">&quot;name&quot;</span>: <span class="string">&quot;欧阳先伟&quot;</span>,</span><br><span class="line">        <span class="attr">&quot;sex&quot;</span>: <span class="number">1</span>,</span><br><span class="line">        <span class="attr">&quot;age&quot;</span>: <span class="number">28</span></span><br><span class="line">    &#125;</span><br><span class="line">]</span><br></pre></td></tr></table></figure>


<h4 id="数据场景：变通二维表"><a href="#数据场景：变通二维表" class="headerlink" title="数据场景：变通二维表"></a>数据场景：变通二维表</h4><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">&#123;</span><br><span class="line">    <span class="attr">&quot;e-type&quot;</span>: <span class="string">&quot;table&quot;</span>,</span><br><span class="line">    <span class="attr">&quot;fields&quot;</span>: [<span class="string">&quot;id&quot;</span>, <span class="string">&quot;name&quot;</span>, <span class="string">&quot;sex&quot;</span>, <span class="string">&quot;age&quot;</span>],</span><br><span class="line">    <span class="attr">&quot;data&quot;</span>: [</span><br><span class="line">        [<span class="number">250</span>, <span class="string">&quot;erik&quot;</span>, <span class="number">1</span>, <span class="number">18</span>],</span><br><span class="line">        [<span class="number">251</span>, <span class="string">&quot;欧阳先伟&quot;</span>, <span class="number">1</span>, <span class="number">28</span>]</span><br><span class="line">    ]</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>




<h3 id="数据页"><a href="#数据页" class="headerlink" title="数据页"></a>数据页</h3><p>数据页是列表数据常用的数据方式，可能通过查询或翻页获得数据。数据页是二维表数据的包装，包含列表数据本身更多的信息。</p>
<p>数据页 <em>必须(MUST)</em> 是一个JSON Object，其中 <em>必须(MUST)</em> 包含的属性为data。data是一个二维表。数据页可以包括一些 <em>可选(OPTIONAL)</em> 的属性，表示当前数据页的信息。下表列举了数据页的可选属性。</p>
<h3 id="数据页可选属性"><a href="#数据页可选属性" class="headerlink" title="数据页可选属性"></a>数据页可选属性</h3><ul>
<li>{Number} page - 当前页码，计数 <em>必须(MUST)</em> 为不小于0的整数，从0开始。</li>
<li>{Number} pageSize - 每页显示条数， <em>必须(MUST)</em> 大于0。</li>
<li>{Number} total - 列表总记录数， <em>必须(MUST)</em> 为不小于0的整数。表示当前条件下所有记录的数目，非本页的记录数。</li>
<li>{String} orderBy - 列表排序规则。多个排序规则之间以逗号分割（,）；正序或倒序以asc或desc表示，与字段名之间以一个空格间隔。例：”id desc,name asc”</li>
<li>{String} keyword - 列表所属的搜索关键字。</li>
<li>{Object} condition - 列表所属的搜索条件集合。属性中可以包含或不包含keyword字段，如果不包含， <em>建议(RECOMMMANDED)</em> 在解析的时候附加搜索关键字keyword条件。 </li>
</ul>
<h4 id="数据场景：数据页"><a href="#数据场景：数据页" class="headerlink" title="数据场景：数据页"></a>数据场景：数据页</h4><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line">&#123;</span><br><span class="line">    <span class="attr">&quot;page&quot;</span>: <span class="number">0</span>,</span><br><span class="line">    <span class="attr">&quot;pageSize&quot;</span>: <span class="number">30</span>,</span><br><span class="line">    <span class="attr">&quot;keyword&quot;</span>: <span class="string">&quot;&quot;</span>,</span><br><span class="line">    <span class="attr">&quot;data&quot;</span>: [</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="attr">&quot;id&quot;</span>: <span class="number">250</span>,</span><br><span class="line">            <span class="attr">&quot;name&quot;</span>: <span class="string">&quot;erik&quot;</span>,</span><br><span class="line">            <span class="attr">&quot;sex&quot;</span>: <span class="number">1</span>,</span><br><span class="line">            <span class="attr">&quot;age&quot;</span>: <span class="number">18</span></span><br><span class="line">        &#125;,</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="attr">&quot;id&quot;</span>: <span class="number">251</span>,</span><br><span class="line">            <span class="attr">&quot;name&quot;</span>: <span class="string">&quot;欧阳先伟&quot;</span>,</span><br><span class="line">            <span class="attr">&quot;sex&quot;</span>: <span class="number">1</span>,</span><br><span class="line">            <span class="attr">&quot;age&quot;</span>: <span class="number">28</span></span><br><span class="line">        &#125;</span><br><span class="line">    ]</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>



<h3 id="键-值对象"><a href="#键-值对象" class="headerlink" title="键/值对象"></a>键/值对象</h3><p>对于在一个JSON Object中表示键/值：</p>
<ul>
<li>键的属性名 <em>必须(MUST)</em> 为name， <em>杜绝(MUST NOT)</em> 使用key或k</li>
<li>值的属性名 <em>必须(MUST)</em> 为value， <em>杜绝(MUST NOT)</em> 使用v。</li>
</ul>
<h4 id="数据场景：键-值对象"><a href="#数据场景：键-值对象" class="headerlink" title="数据场景：键/值对象"></a>数据场景：键/值对象</h4><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">&#123;</span><br><span class="line">    <span class="attr">&quot;name&quot;</span>: <span class="string">&quot;BMW&quot;</span>,</span><br><span class="line">    <span class="attr">&quot;value&quot;</span>: <span class="number">1</span></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>



<h3 id="键-值有序集合"><a href="#键-值有序集合" class="headerlink" title="键/值有序集合"></a>键/值有序集合</h3><p>键/值有序集合表示对事务或逻辑类型的抽象与分类。常见的应用场景有单选复选框集合，下拉菜单等。</p>
<p>标准的键/值有序集合是一个JSON Array，集合中的每一项是一个JSON Object。项 <em>必须(MUST)</em> 包含name和value属性。 <em>可以(MAY)</em> 通过其他的属性修饰每一项的特殊信息，如selected。</p>
<h4 id="数据场景：键-值有序集合"><a href="#数据场景：键-值有序集合" class="headerlink" title="数据场景：键/值有序集合"></a>数据场景：键/值有序集合</h4><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">[</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="attr">&quot;name&quot;</span>: <span class="string">&quot;BMW&quot;</span>,</span><br><span class="line">        <span class="attr">&quot;value&quot;</span>: <span class="number">1</span></span><br><span class="line">    &#125;,</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="attr">&quot;name&quot;</span>: <span class="string">&quot;Benz&quot;</span>,</span><br><span class="line">        <span class="attr">&quot;value&quot;</span>: <span class="number">2</span>,</span><br><span class="line">        <span class="attr">&quot;selected&quot;</span>: <span class="literal">true</span></span><br><span class="line">    &#125;</span><br><span class="line">]</span><br></pre></td></tr></table></figure>




<h3 id="树"><a href="#树" class="headerlink" title="树"></a>树</h3><p>树形数据用于表示层叠的数据结构。树型数据 <em>必须(MUST)</em> 是一个JSON Object，代表树型数据的根节点。下面是标准定义的可选节点列表，不在列表中的属性 <em>可以(SHOULD)</em> 自行扩展。</p>
<h3 id="树型数据结构的可选节点属性"><a href="#树型数据结构的可选节点属性" class="headerlink" title="树型数据结构的可选节点属性"></a>树型数据结构的可选节点属性</h3><ul>
<li>{Number|String} id - 节点的唯一标识。</li>
<li>{String} text - 名称或用于显示的字符串。</li>
<li>{Array} children - 子节点列表。</li>
</ul>
<h4 id="数据场景：树型数据"><a href="#数据场景：树型数据" class="headerlink" title="数据场景：树型数据"></a>数据场景：树型数据</h4><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br></pre></td><td class="code"><pre><span class="line">&#123;</span><br><span class="line">    <span class="attr">&quot;id&quot;</span>: <span class="number">1</span>,</span><br><span class="line">    <span class="attr">&quot;text&quot;</span>: <span class="string">&quot;中国&quot;</span>,</span><br><span class="line">    <span class="attr">&quot;children&quot;</span>: [</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="attr">&quot;id&quot;</span>: <span class="number">10</span>,</span><br><span class="line">            <span class="attr">&quot;text&quot;</span>: <span class="string">&quot;北京&quot;</span>,</span><br><span class="line">            <span class="attr">&quot;children&quot;</span>: [</span><br><span class="line">                &#123;</span><br><span class="line">                    <span class="attr">&quot;id&quot;</span>: <span class="number">100</span>,</span><br><span class="line">                    <span class="attr">&quot;text&quot;</span>: <span class="string">&quot;东城区&quot;</span></span><br><span class="line">                &#125;,</span><br><span class="line">                &#123;</span><br><span class="line">                    <span class="attr">&quot;id&quot;</span>: <span class="number">101</span>,</span><br><span class="line">                    <span class="attr">&quot;text&quot;</span>: <span class="string">&quot;西城区&quot;</span></span><br><span class="line">                &#125;,</span><br><span class="line">                &#123;</span><br><span class="line">                    <span class="attr">&quot;id&quot;</span>: <span class="number">102</span>,</span><br><span class="line">                    <span class="attr">&quot;text&quot;</span>: <span class="string">&quot;海淀区&quot;</span></span><br><span class="line">                &#125;</span><br><span class="line">                ......</span><br><span class="line">            ]</span><br><span class="line">        &#125;,</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="attr">&quot;id&quot;</span>: <span class="number">31</span>,</span><br><span class="line">            <span class="attr">&quot;text&quot;</span>: <span class="string">&quot;海南&quot;</span>,</span><br><span class="line">            <span class="attr">&quot;children&quot;</span>: [</span><br><span class="line">                &#123;</span><br><span class="line">                    <span class="attr">&quot;id&quot;</span>: <span class="number">600</span>,</span><br><span class="line">                    <span class="attr">&quot;text&quot;</span>: <span class="string">&quot;海口&quot;</span></span><br><span class="line">                &#125;,</span><br><span class="line">                &#123;</span><br><span class="line">                    <span class="attr">&quot;id&quot;</span>: <span class="number">601</span>,</span><br><span class="line">                    <span class="attr">&quot;text&quot;</span>: <span class="string">&quot;三亚&quot;</span></span><br><span class="line">                &#125;,</span><br><span class="line">                &#123;</span><br><span class="line">                    <span class="attr">&quot;id&quot;</span>: <span class="number">602</span>,</span><br><span class="line">                    <span class="attr">&quot;text&quot;</span>: <span class="string">&quot;五指山&quot;</span></span><br><span class="line">                &#125;</span><br><span class="line">                ......</span><br><span class="line">            ]</span><br><span class="line">        &#125;</span><br><span class="line">        ......</span><br><span class="line">    ]</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>


<h2 id="引用"><a href="#引用" class="headerlink" title="引用"></a>引用</h2><ul>
<li>[RFC 2119] “Key words for use in RFCs to Indicate Requirement Levels”</li>
<li>[RFC 4627] “The application/json Media Type for JavaScript Object Notation (JSON)”</li>
<li>[RFC 2616] “Hypertext Transfer Protocol”</li>
<li>[RFC 3339] “Date and Time on the Internet: Timestamps”</li>
</ul>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/kity@2.0.4/dist/kity.min.js"></script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/kityminder-core@1.4.50/dist/kityminder.core.min.js"></script><script defer="true" type="text/javascript" src="https://cdn.jsdelivr.net/npm/hexo-simple-mindmap@0.2.0/dist/mindmap.min.js"></script><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/hexo-simple-mindmap@0.2.0/dist/mindmap.min.css">
      </div>
      
      
      
    </div>

    
    


</div>
  </main>

  <footer class="footer">
    <div class="footer-inner">


<div class="copyright">
  &copy; 
  <span itemprop="copyrightYear">2023</span>
  <span class="with-love">
    <i class="fa fa-heart"></i>
  </span>
  <span class="author" itemprop="copyrightHolder">郭泽</span>
</div>
  <div class="powered-by">由 <a href="https://hexo.io/" rel="noopener" target="_blank">Hexo</a> & <a href="https://theme-next.js.org/" rel="noopener" target="_blank">NexT.Gemini</a> 强力驱动
  </div>

    </div>
  </footer>

  
  <script src="https://cdnjs.cloudflare.com/ajax/libs/animejs/3.2.1/anime.min.js" integrity="sha256-XL2inqUJaslATFnHdJOi9GfQ60on8Wx1C2H8DYiN1xY=" crossorigin="anonymous"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/fancybox/3.5.7/jquery.fancybox.min.js" integrity="sha256-yt2kYMy0w8AbtF89WXb2P1rfjcP/HTHLT7097U8Y5b8=" crossorigin="anonymous"></script>
<script src="/js/comments.js"></script><script src="/js/utils.js"></script><script src="/js/motion.js"></script><script src="/js/next-boot.js"></script><script src="/js/bookmark.js"></script>

  
<script src="https://cdnjs.cloudflare.com/ajax/libs/hexo-generator-searchdb/1.4.0/search.js" integrity="sha256-vXZMYLEqsROAXkEw93GGIvaB2ab+QW6w3+1ahD9nXXA=" crossorigin="anonymous"></script>
<script src="/js/third-party/search/local-search.js"></script>

  <script class="next-config" data-name="pdf" type="application/json">{"object_url":{"url":"https://cdnjs.cloudflare.com/ajax/libs/pdfobject/2.2.8/pdfobject.min.js","integrity":"sha256-tu9j5pBilBQrWSDePOOajCUdz6hWsid/lBNzK4KgEPM="},"url":"/lib/pdf/web/viewer.html"}</script>
  <script src="/js/third-party/tags/pdf.js"></script>

  <script class="next-config" data-name="mermaid" type="application/json">{"enable":true,"theme":{"light":"default","dark":"dark"},"js":{"url":"https://cdnjs.cloudflare.com/ajax/libs/mermaid/9.1.3/mermaid.min.js","integrity":"sha256-TIYL00Rhw/8WaoUhYTLX9SKIEFdXxg+yMWSLVUbhiLg="}}</script>
  <script src="/js/third-party/tags/mermaid.js"></script>

  <script src="/js/third-party/fancybox.js"></script>


  





</body>
</html>
